package utils

import (
	"errors"
	"time"
)

// ToDayZeroDiff 获取明天凌晨0点到当前时间的时间差
func ToDayZeroDiff() time.Duration {
	// 获取当前时间
	now := time.Now()

	// 设置明天时间
	toDay := now.AddDate(0, 0, 1)

	// 设置凌晨0点
	toDay = time.Date(toDay.Year(), toDay.Month(), toDay.Day(), 0, 0, 0, 0, time.Local)

	// 计算当前时间到明天凌晨零点时间差,并转换为分钟
	return time.Minute * (time.Duration(toDay.Unix()-now.Unix()) / 60)
}

// IsExpired 验证时间是否到期
func IsExpired(expired string, d ...int64) error {
	// 解析时间
	t, err := Timestamp(expired)
	if err != nil {
		return err
	}

	// 当前时间
	n := time.Now().Unix()
	if len(d) > 0 {
		n = d[0]
	}

	// 是否有效
	if t <= n {
		return errors.New(`invalid expired`)
	}
	return nil
}

// Timestamp 把时间转换为时间戳
func Timestamp(date string) (int64, error) {
	// 解析时间
	t, err := time.ParseInLocation(time.DateTime, date, time.Local)
	if err != nil {
		return 0, err
	}
	return t.Unix(), nil
}
